package chapter_04;


// 栈结构

/*
栈主要机制可以用数组来实现，但它也可以用链表来实现。
栈只允许访问一个数据项：即最后插入的数据项。移除这个项之后才能访问倒数第二个插入的数据
项，依此类推。
大多数微处理器运用基于栈的体系结构。当调用一个方法时，把它的返回地址和参数压入栈，当方
法返回结束时，那些数据出栈。
 */


public class StackX {
    protected int maxSize;
    protected long[] stackArray;
    protected int top;

    public StackX(int s) {
        maxSize = s;
        stackArray = new long[maxSize];
        top = -1;
    }

    public void push(long j) {
        if (!isFull())
            stackArray[++top] = j;
    }

    public long pop() {
        return stackArray[top--];
    }

    public long peek() {
        // 返回栈顶
        return stackArray[top];
    }

    public boolean isEmpty() {
        return top == -1;
    }

    public boolean isFull() {
        return top == maxSize - 1;
    }

    public static void main(String[] args) {
        StackX theStack = new StackX(10);
        theStack.push(20);
        theStack.push(40);
        theStack.push(60);
        theStack.push(80);

        while (!theStack.isEmpty()) {
            long value = theStack.pop();
            System.out.print(value);
            System.out.print(" ");
        }
        System.out.print("");
    }
}
